home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / Graphic Elements 3 / GEMisc / QTMovieGE.c < prev    next >
Text File  |  1995-06-18  |  3KB  |  100 lines

  1. /*
  2.     QTMovieGE.c
  3.     
  4.     QuickTime movie as a graphic element
  5.     
  6.     Copyright 1995 by Al Evans. All rights reserved.
  7.     
  8.     5/10/95
  9.     
  10. */
  11.  
  12. #include "QTMovieGE.h"
  13. #include "Rects.h"
  14.  
  15. pascal void RenderQTMovieGE(GrafElPtr movieElement, GWorldPtr destGWorld);
  16. pascal void CleanupMovieGE(GEWorldPtr world, GrafElPtr element);
  17.  
  18. GrafElPtr NewQTMovieGE(GEWorldPtr world, OSType id, short plane, 
  19.                                             Movie movie, short xPos, short yPos)
  20.                                                             
  21. {
  22.     GrafElPtr    element;
  23.     Rect        movieRect;
  24.  
  25.     element = NewGrafElement(world, id, plane, sizeof(QTMovieGE), NoLoader, 0, 0);
  26.     if (element) {        
  27.         element->copyMode = srcCopy;
  28.         element->flags = geShown;
  29.         element->renderIt = RenderQTMovieGE;
  30.         element->drawIt = nil;
  31.         element->changeIntrvl = 0;
  32.         element->lastChangeTime = CurrentGETime(world);
  33.         
  34.         // Set up movie
  35.         SetMovieGWorld(movie, (CGrafPtr) world->stageGWorld, nil);
  36.         GetMovieBox(movie, &movieRect);
  37.         RectOffset(&movieRect, -movieRect.left, -movieRect.top);
  38.         movieRect.right = movieRect.left + ScaleToWorld(world, RectWidth(&movieRect));
  39.         movieRect.bottom = movieRect.top + ScaleToWorld(world, RectHeight(&movieRect));
  40.         element->graphRect = movieRect;
  41.         element->animationRect = movieRect;
  42.         RectOffset(&element->animationRect, ScaleToWorld(world, xPos), 
  43.                                                 ScaleToWorld(world, yPos));
  44.         SetMovieBox(movie, &element->animationRect);
  45.         GoToBeginningOfMovie(movie);
  46.         
  47.         ChangedRect(world, &element->animationRect);
  48.         ((QTMovieGEPtr) element)->geMovie = movie;
  49.         ((QTMovieGEPtr) element)->tlSave = *((Point *) &element->animationRect);
  50.         SetCleanupProc(world, id, CleanupMovieGE); 
  51.     }
  52.     return element;
  53.         
  54. }
  55.  
  56. pascal void RenderQTMovieGE(GrafElPtr movieElement, GWorldPtr destGWorld)
  57. {
  58.     /*
  59.         Since QuickTime doesn't pay attention to clipRgn, manipulate the visRgn
  60.         directly. This is MUCH faster than using SetMovieDisplayClipRgn()
  61.     */
  62.     RgnHandle saveRgn = destGWorld->visRgn;
  63.     RgnHandle drawRgn = NewRgn();
  64.     
  65.     RectRgn(drawRgn, &movieElement->drawRect);
  66.     destGWorld->visRgn = drawRgn;
  67.     UpdateMovie(((QTMovieGEPtr) movieElement)->geMovie);
  68.     MoviesTask(((QTMovieGEPtr) movieElement)->geMovie, 1);
  69.     destGWorld->visRgn = saveRgn;
  70.     DisposeRgn(drawRgn);
  71. }
  72.  
  73. pascal void CleanupMovieGE(GEWorldPtr world, GrafElPtr element)
  74. {
  75.     DisposeMovie(((QTMovieGEPtr) element)->geMovie);
  76. }
  77.  
  78. pascal void GEMovieAutoChange(GEWorldPtr world, GrafElPtr element)
  79. {
  80.     // If element has been moved, move the QT movie to new position
  81.     // (comparing points as longs!)
  82.     if (*((long *) &((QTMovieGEPtr) element)->tlSave) != *((long *) &element->animationRect))
  83.     {
  84.         SetMovieBox(((QTMovieGEPtr) element)->geMovie, &element->animationRect);
  85.         ((QTMovieGEPtr) element)->tlSave = *((Point *) &element->animationRect);
  86.     }
  87.     ChangedRect(world, &element->animationRect);
  88. }
  89.  
  90. Movie GetGEMovie(GEWorldPtr world, OSType movieGEID)
  91. {
  92.     QTMovieGEPtr movieElement = (QTMovieGEPtr) FindElementByID(world, movieGEID);
  93.     
  94.     if (movieElement == nil)
  95.         return nil;
  96.     else
  97.         return movieElement->geMovie;
  98. }
  99.  
  100.